from utils import get_embedding, cosine_similarity, cosine_similarity_2, logging




# 参考文章如下
# 链接 http://www.csrc.gov.cn/csrc/c100107/c1447186/content.shtml

query = """
上市公司依照《实施细则》第七条引入战略投资者，有什么具体要求?
"""


text1 = """
上市公司非公开发行股票引入战略投资者，具体按以下要求把握：

　　一、关于战略投资者的基本要求

　　《实施细则》第七条所称战略投资者，是指具有同行业或相关行业较强的重要战略性资源，与上市公司谋求双方协调互补的长期共同战略利益，愿意长期持有上市公司较大比例股份，愿意并且有能力认真履行相应职责，委派董事实际参与公司治理，提升上市公司治理水平，帮助上市公司显著提高公司质量和内在价值，具有良好诚信记录，最近三年未受到证监会行政处罚或被追究刑事责任的投资者。

　　战略投资者还应当符合下列情形之一：

　　1.能够给上市公司带来国际国内领先的核心技术资源，显著增强上市公司的核心竞争力和创新能力，带动上市公司的产业技术升级，显著提升上市公司的盈利能力。

　　2.能够给上市公司带来国际国内领先的市场、渠道、品牌等战略性资源，大幅促进上市公司市场拓展，推动实现上市公司销售业绩大幅提升。
"""



text2 = """
上市公司非公开发行股票引入战略投资者，具体按以下要求把握：

二、关于上市公司引入战略投资者的决策程序

　　上市公司拟引入战略投资者的，应当按照《公司法》《证券法》《管理办法》《创业板管理办法》和公司章程的规定，履行相应的决策程序。

　　1.上市公司应当与战略投资者签订具有法律约束力的战略合作协议，作出切实可行的战略合作安排。战略合作协议的主要内容应当包括：战略投资者具备的优势及其与上市公司的协同效应，双方的合作方式、合作领域、合作目标、合作期限、战略投资者拟认购股份的数量、定价依据、参与上市公司经营管理的安排、持股期限及未来退出安排、未履行相关义务的违约责任等。

　　2.上市公司董事会应当将引入战略投资者的事项作为单独议案审议，并提交股东大会审议。独立董事、监事会应当对议案是否有利于保护上市公司和中小股东合法权益发表明确意见。

　　3.上市公司股东大会对引入战略投资者议案作出决议，应当就每名战略投资者单独表决，且必须经出席会议的股东所持表决权三分之二以上通过，中小投资者的表决情况应当单独计票并披露。
"""

text3 = """
上市公司非公开发行股票引入战略投资者，具体按以下要求把握：

三、关于上市公司引入战略投资者的信息披露要求

　　上市公司应当按照《管理办法》《创业板管理办法》和《实施细则》的有关规定，充分履行信息披露义务。

　　1.董事会议案应当充分披露公司引入战略投资者的目的，商业合理性，募集资金使用安排，战略投资者的基本情况、穿透披露股权或投资者结构、战略合作协议的主要内容等。

　　2.非公开发行股票完成后，上市公司应当在年报、半年报中披露战略投资者参与战略合作的具体情况及效果.
"""

text4 = """
上市公司非公开发行股票引入战略投资者，具体按以下要求把握：

四、关于保荐机构、证券服务机构的履职要求

　　1.保荐机构和发行人律师应当勤勉尽责履行核查义务，并对下列事项发表明确 opinion：

　　（1）投资者是否符合战略投资者的要求，上市公司利益和中小投资者合法权益是否得到有效保护；

　　（2）上市公司是否存在借战略投资者入股名义损害中小投资者合法权益的情形；

　　（3）上市公司及其控股股东、实际控制人、主要股东是否存在向发行对象作出保底保收益或变相保底保收益承诺，或者直接或通过利益相关方向发行对象提供财务资助或者补偿的情形。

　　2.持续督导期间，保荐机构应当履行职责，持续关注战略投资者与上市公司战略合作情况，督促上市公司及战略投资者认真履行战略合作协议的相关义务，切实发挥战略投资者的作用；发现上市公司及战略投资者未履行相关义务的，应当及时向监管机构报告.
"""

text5 = """
上市公司非公开发行股票引入战略投资者，具体按以下要求把握：

五、关于监管和处罚

　　上市公司、战略投资者、保荐机构、证券服务机构等相关各方未按照上述要求披露相关信息或者履行职责，或者所披露的信息存在虚假记载、误导性陈述或者重大遗漏的，我会将依照《证券法》《管理办法》《创业板管理办法》等法律法规对上市公司、有关各方及其相关责任人员追究法律责任.
"""



text_list = [text1, text2, text3, text4, text5]
score_list = [None] * len(text_list)

# 获取两个文本的嵌入向量
query_emb = get_embedding(query)

# 使用 for 循环计算每个文档与查询文本的余弦相似度
for i, text in enumerate(text_list):
    text_emb = get_embedding(text)
    similarity = cosine_similarity_2(query_emb, text_emb)
    score_list[i] = similarity
    print(f"文档{i+1}: {similarity:.4f}")

# 保存到日志
logging.info(f"'query': {query}")
for i, text in enumerate(text_list):
    logging.info(f"'文档{i+1}': {text}")

for i, score in enumerate(score_list):
    logging.info(f"'问题与文档{i+1}的相似度分数': {score:.4f}")

# 日志分割==========
logging.info("'================================='")
logging.info("'================================='\n\n\n")
